/**
 * 游戏计时器类
 * 控制方块自动下降的速度
 */
export class GameTimer {
    private lastTime: number = 0;
    private dropInterval: number = 1000; // 初始下降间隔（毫秒）
    private accumulatedTime: number = 0;

    /**
     * 根据等级计算下降间隔
     * 等级越高，下降速度越快
     */
    calculateDropInterval(level: number): number {
        // 基础速度：1000ms，每级减少50ms，最快50ms
        const interval = Math.max(50, 1000 - (level - 1) * 50);
        return interval;
    }

    /**
     * 更新等级对应的下降速度
     */
    updateLevel(level: number): void {
        this.dropInterval = this.calculateDropInterval(level);
    }

    /**
     * 检查是否应该下降
     * @param currentTime 当前时间戳
     * @returns 是否应该下降
     */
    shouldDrop(currentTime: number): boolean {
        if (this.lastTime === 0) {
            this.lastTime = currentTime;
            return false;
        }

        const deltaTime = currentTime - this.lastTime;
        this.accumulatedTime += deltaTime;
        this.lastTime = currentTime;

        if (this.accumulatedTime >= this.dropInterval) {
            this.accumulatedTime = 0;
            return true;
        }

        return false;
    }

    /**
     * 重置计时器
     */
    reset(): void {
        this.lastTime = 0;
        this.accumulatedTime = 0;
    }
}

